import java.io.*;

/**
 * @Title OutputStream输出文件
 * @Description TODO
 * @Author CAI ZHAI
 * @Date 2021/12/1 21:26
 **/
public class OutputStream0{
    
    public static void main(String[] args) throws Exception{
        OutputStream1();
    }
    
    /**
     * @title 用缓冲流buffer拷贝大文件
     * @Description 如果文件太大，一次性读取这个大文件的所有数据，内存可能装不下，但是如果每次只读一个字节数据，会耗时太慢。
     * 因此用BufferedInputStream一次读取1024*8个字节数据（一块数据），用BufferedOutputStream放入缓冲区，分批读写。
     **/
    private static void OutputStream1() throws Exception{
        BufferedInputStream bufferInput = null;
        BufferedOutputStream bufferOutput = null;
        try
        {
            // 输入缓冲流
            InputStream input = new FileInputStream(new File("D:\\06data\\test.txt"));
            bufferInput = new BufferedInputStream(input);
            // 输出缓冲流
            OutputStream output = new FileOutputStream(new File("D:\\06data\\test1.txt"));
            bufferOutput = new BufferedOutputStream(output);
            // 定义个8kb字节数组,作为缓冲区流
            byte[] bytes = new byte[1024 * 8];
            int len = 0;
            while((len = bufferInput.read(bytes)) != -1)
            {
                bufferOutput.write(bytes, 0, len);
            }
        }
        catch(IOException e)
        {
        }
        finally
        {
            try
            {
                if(bufferInput != null)
                {
                    bufferInput.close();
                }
                if(bufferOutput != null)
                {
                    bufferOutput.close();
                }
            }
            catch(IOException e)
            {
            }
        }
    }
    
}
